package io4;

import java.io.*;
import java.util.*;

/*使用ObjectInputStream和ObjectOutputStream恢复与保存员工对象。
有Staff对象，部分代码如下：
class Staff {
private String name;
private int age
private double salary;
//构造方法
…
//get/set 方法
…
//toString 方法
…
}
1） 完善Staff对象，并使其能使用对象序列化机制。
2） 利用ObjectOutputStream 存入两个Staff对象， 然后使用
ObjectInputStream 读出这两个对象，并打印这两个对象的信息。
3） 写一个方法saveStaffToFile(Staff staff, File file)，该方法完成下面的
功能：
假设有一个Staff对象w1，File 对象f1 如下：
Staff staff = new Staff("Tom", 30, 5000);
File file = new File(“test.txt”);
则调用saveStaffToFile(staff, file)，会在test.txt 中增加一行：
Tom/30/5000
4） 写一个方法List<Staff> readStaffFromFile(File file)，该方法读某
个文件，从文件信息中创建一个Staff 类型的List。
例如，假设文件内容如下：
Tom/30/5000
Jim/25/3000
Terry/33/4500
则返回一个包含三个Staff 对象的List。
*/
public class Test {
    public static List<Staff> readStaffFromFile(File file){
        BufferedReader bfr = null;
        FileReader fr = null;
        String temp = null;
        List<Staff> list = new ArrayList<>();
        Staff staff = null;
        try {
            fr = new FileReader(file);
            bfr = new BufferedReader(fr);//使用字符流读取字符
            temp = bfr.readLine();//读取一行
            while (temp != null){
                staff = new Staff(temp.substring(0,temp.indexOf("/")),Integer.parseInt(temp.substring(temp.indexOf("/") + 1 ,temp.lastIndexOf("/"))),Double.parseDouble(temp.substring(temp.lastIndexOf("/") + 1)));
                //将读取到的字符串转换为一个对象（将一个字符串截取一部分字符串，余下的在按规律截取转化为浮点数和整数，当做年龄和薪水赋给新的对象当形参）
                list.add(staff);//把对象添加进去
                temp = bfr.readLine();
            }
            fr.close();
            bfr.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
    public static void saveStaffToFile(Staff w1, File f1){
        BufferedWriter bfw = null;
        FileWriter fw = null;
        String temp = null;
        try {
            fw = new FileWriter(f1);
            bfw = new BufferedWriter(fw);
            temp = w1.toString().replace(",age:","/");//把"/"进行替换，得到新的字符串
            temp = temp.replace(",salsry:","/");
            temp = temp.substring(5);
            bfw.write(temp);//写入到文件中
            bfw.flush();
            bfw.close();
            fw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;
        Staff tom = null;
        Staff jney = null;
        ArrayList<Staff> outputList = new ArrayList<>();
        File f = new File("D:/excel/test.txt");
        try {
            oos = new ObjectOutputStream(new FileOutputStream("D:/excel/staff"));
            tom = new Staff("tom", 28, 4000);
            jney = new Staff("jney", 25, 4500);
            outputList.add(tom);
            outputList.add(jney);
            oos.writeObject(outputList);
            saveStaffToFile(tom,f);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            oos.close();
            oos = null;
        }
        ois = new ObjectInputStream(new FileInputStream("D:/excel/staff"));
        ArrayList<Staff> inputList = (ArrayList<Staff>) ois.readObject();
        //读入对象时，直接读取所有的对象
        //Staff employee = (Staff) ois.readObject();
        for (Staff employee : inputList
        ) {
            System.out.println(employee.toString());
        }
        File file2 = new File("D:/excel/test2.txt");
        List<Staff> list = new ArrayList<>();
        list = readStaffFromFile(file2);
        for (Staff staff:list
             ) {
            System.out.println(staff.toString());
        }
    }
}
